package com.lqk.decorator;

/**
 * @author lqk
 * @date 2021/12/5 18:10
 *
 * 装饰者模式定义
 *  1) 装饰者模式：动态的将新功能附加到对象上。在对象功能扩展方面，它比继承更
 *  有弹性，装饰者模式也体现了开闭原则(ocp)
 *  2) 这里提到的动态的将新功能附加到对象和ocp原则，在后面的应用实例上会以代
 *  码的形式体现，请同学们注意体会。
 */
public abstract class Decorator extends Drink {
    private Drink drink;

    public Decorator(Drink drink) {
        this.drink = drink;
    }

    @Override
    public float cost() {
        // getPrice 装饰者的价格，即调料的价格
        return super.getPrice() + drink.cost();
    }

    @Override
    public String getDes() {
        return super.getDes()+ super.getPrice()+"&&"+drink.getDes();
    }
}
